package org.ch02.test09.demo02;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

/**
 * 内省操作
 * BeanInfo：JavaBean对象的封装
 *  PropertyDescriptor（属性描述器）：JavaBean对象的属性封装
 *  MethodDescriptor（方法描述器）：JavaBean对象的方法封装
 *
 * @author ZQX
 * @date 2025-03-24
 */
public class MainTest {
    public static void main(String[] args) throws Exception {
        // 第一：通过 Introspector 工具类，
        // 获取要操作的 JavaBean 对象的 BeanInfo 对象
        // BeanInfo beanInfo = Introspector
        //         .getBeanInfo(Person.class);

        BeanInfo beanInfo = Introspector
                .getBeanInfo(Person.class,Object.class);

        // 第二：基于 BeanInfo 对象，实现相关的操作
        // 实现属性（setter/getter）的读和写操作
        PropertyDescriptor[] propertyDescriptors = beanInfo
                .getPropertyDescriptors();

        // 打印输出 JavaBean 对象的属性数量
        System.out.println("属性数量：" + propertyDescriptors.length);
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.println("属性名称：" + propertyDescriptor.getName());
        }

    }
}
